#include "MyDateDelegate.h"
#include <QDateEdit>
#include <QPainter>

MyDateDelegate::MyDateDelegate(QObject *parent)
    : QStyledItemDelegate(parent)
{
}

QWidget *MyDateDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
{
    // 使用 QDateEdit 作为日期编辑器
    QDateEdit *editor = new QDateEdit(parent);
    editor->setCalendarPopup(true);  // 启用日历弹出窗口
    editor->setDisplayFormat("yyyy-MM-dd");  // 设置日期格式
    editor->setMinimumDate(QDate(1900, 1, 1));  // 设置最小日期
    editor->setMaximumDate(QDate(2100, 12, 31));  // 设置最大日期
    return editor;
}

void MyDateDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    // 从模型中获取日期字符串
    QString dateStr = index.model()->data(index, Qt::EditRole).toString();

    // 设置到 QDateEdit
    QDateEdit *dateEdit = qobject_cast<QDateEdit *>(editor);
    if (dateEdit) {
        QDate date = QDate::fromString(dateStr, "yyyy-MM-dd");  // 按照格式解析日期
        dateEdit->setDate(date.isValid() ? date : QDate::currentDate());  // 无效日期则设置为当前日期
    }
}

void MyDateDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    // 获取编辑器中的日期
    QDateEdit *dateEdit = qobject_cast<QDateEdit *>(editor);
    if (dateEdit) {
        QDate date = dateEdit->date();
        model->setData(index, date.toString("yyyy-MM-dd"), Qt::EditRole);  // 保存为格式化字符串
    }
}

void MyDateDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    // 获取模型中的日期数据
    QString dateStr = index.model()->data(index, Qt::DisplayRole).toString();

    // 自定义绘制：显示日期
    painter->save();
    painter->drawText(option.rect, Qt::AlignCenter, dateStr);  // 居中绘制日期
    painter->restore();
}

void MyDateDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
{
    // 设置编辑器的显示位置
    editor->setGeometry(option.rect);
}
